home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib07.dsk / THREE-D TIC TAC TOE.bas < prev    next >
BASIC Source File  |  2023-02-26  |  10KB  |  245 lines

  1. 2  REM  ****************************
  2. 3  REM  *    THREE-D TIC TAC TOE   *
  3. 4  REM  *     BY BILL PUMPHREY     *
  4. 5  REM  *    COPYRIGHT (C) 1981    *
  5. 6  REM  *    BY MICRO-SPARC INC    *
  6. 7  REM  *    LINCOLN MA   01773    *
  7. 8  REM  ****************************
  8. 23  HOME : GR 
  9. 25  FOR I = 0 TO 39  STEP 2
  10. 27  COLOR= 1
  11. 29  VLIN 0,11 AT I: VLIN 12,23 AT I +1: VLIN 24,35 AT I
  12. 31  COLOR= 12
  13. 33  VLIN 0,11 AT I +1: VLIN 12,23 AT I: VLIN 24,35 AT I +1
  14. 35  NEXT I
  15. 37  SPEED= 100
  16. 39  HTAB 3: PRINT " COLOR/3D   T I C   T A C   T O E  "
  17. 41  HTAB 14: PRINT "FOR APPLE II"
  18. 42  PRINT 
  19. 43  HTAB 5: PRINT "COPYRIGHT 1980 BY BILL PUMPHREY";
  20. 45  FOR Z = 1 TO 1000: NEXT Z
  21. 47  TEXT : HOME : SPEED= 255
  22. 54 S = 0:T = 0
  23. 55  PRINT "THIS IS A THREE DIMENSIONAL GAME OF TIC TAC TOE.  TWO PLAYERS (RED AND GREEN)   TAKE TURNS PUTTING THEIR COLORED BLOCKS ";
  24. 60  PRINT "ON NINE POLES, SCORING EACH TIME THREE  BLOCKS OF THE SAME COLOR ARE PLACED IN AVERTICAL, DIAGONAL, OR HORIZONTAL LINE. GAME ENDS WHEN ALL POLES ARE FULL."
  25. 65  PRINT : PRINT "EACH POLE IS DIVIDED INTO THREE SEGMENTS--BOTTOM, MIDDLE, & TOP.  FIRST, SELECT WHICH POLE (1-9) YOU WANT TO PLACE YOUR BLOCK ON. THEN SELECT THE SEGMENT(B,M,T)";
  26. 67  PRINT 
  27. 70  PRINT "A DIAGRAM SHOWING THE POLE NUMBERS IS   ALWAYS SHOWN BELOW THE PLAYING AREA."
  28. 72  PRINT : PRINT "IF YOU SHOULD ENTER A WRONG POLE NUMBER,ENTER THE LETTER 'E' AS YOUR POSITION   SELECTION, THEN ENTER THE CORRECT POLE  NUMBER AND POSITION SELECTION."
  29. 75  PRINT : INPUT "ENTER THE NAME OF THE FIRST PLAYER      ";A$
  30. 77  IF A$ = ""  THEN 75
  31. 80  PRINT : INPUT "ENTER THE SECOND PLAYER'S NAME          ";B$
  32. 82  IF B$ = ""  THEN 80
  33. 85  IF  LEN(A$) + LEN(B$) >16  THEN 87
  34. 86  GOTO 99
  35. 87  HOME : PRINT "THE NAMES ARE TOO LONG FOR THE PROGRAM. ABBREVIATE OR CHANGE THEM THEN REENTER. "
  36. 88  FOR Z = 1 TO 1000: NEXT Z: GOTO 75
  37. 99  REM * SCREEN SET-UP
  38. 100  HOME : RESTORE :S = 0:R = 0:T = 0
  39. 105  GR : COLOR= 13
  40. 110  HLIN 0,39 AT 0: HLIN 0,39 AT 39
  41. 115  VLIN 0,39 AT 0: VLIN 0,39 AT 39
  42. 120  COLOR= 15
  43. 125  VLIN 4,21 AT 3: VLIN 12,29 AT 7: VLIN 20,37 AT 11
  44. 130  VLIN 4,21 AT 15: VLIN 12,29 AT 19: VLIN 20,37 AT 23
  45. 135  VLIN 4,21 AT 27: VLIN 12,29 AT 31: VLIN 20,37 AT 35
  46. 140  IF X = 1  OR X = 12  THEN 200
  47. 150 X = 12: COLOR= X
  48. 200  REM * PLAYER ROUTINE
  49. 201 R = 0
  50. 205  VTAB 21: PRINT " 1   2   3          "
  51. 210  VTAB 22: PRINT "  4   5   6       "
  52. 215  VTAB 23: PRINT "   7   8   9"
  53. 222  IF X = 1 GOTO 235
  54. 225  VTAB 21: HTAB 20: PRINT A$;"'S MOVE      ":X = 1: COLOR= X
  55. 230  GOTO 300
  56. 235  VTAB 21: HTAB 20: PRINT B$;"'S MOVE      ":X = 12: COLOR= X
  57. 300  REM * MOVE ROUTINE
  58. 301  COLOR= X
  59. 302  FOR Z = 1 TO 17:Y =  PEEK( -16336): NEXT Z
  60. 303  VTAB 22: HTAB 20: PRINT "WHICH POLE (1-9)    ";: GET P$
  61. 304 PV =  VAL(P$): IF PV >0  AND PV <10 GOTO 306
  62. 305  GOTO 303
  63. 306  VTAB 22: HTAB 20: PRINT "WHICH LEVEL (B-M-T) ";: GET L$
  64. 307  IF L$ = "E" GOTO 303
  65. 308  IF L$ = "B"  OR L$ = "M"  OR L$ = "T" GOTO 310
  66. 309  GOTO 306
  67. 310  ON PV GOTO 515,495,475,455,435,415,395,375,355
  68. 355  IF  SCRN( 35,37) = 15  AND L$ = "B" GOTO 357
  69. 356  GOTO 358
  70. 357  VLIN 32,37 AT 35: GOTO 600
  71. 358  IF  SCRN( 35,29) = 15  AND L$ = "M" GOTO 360
  72. 359  GOTO 361
  73. 360  VLIN 26,31 AT 35: GOTO 600
  74. 361  IF  SCRN( 35,21) = 15  AND L$ = "T" GOTO 363
  75. 362  GOTO 364
  76. 363  VLIN 20,25 AT 35: GOTO 600
  77. 364  GOTO 530
  78. 375  IF  SCRN( 23,37) = 15  AND L$ = "B" GOTO 377
  79. 376  GOTO 378
  80. 377  VLIN 32,37 AT 23: GOTO 600
  81. 378  IF  SCRN( 23,29) = 15  AND L$ = "M" GOTO 380
  82. 379  GOTO 381
  83. 380  VLIN 26,31 AT 23: GOTO 600
  84. 381  IF  SCRN( 23,21) = 15  AND L$ = "T" GOTO 383
  85. 382  GOTO 384
  86. 383  VLIN 20,25 AT 23: GOTO 600
  87. 384  GOTO 530
  88. 395  IF  SCRN( 11,37) = 15  AND L$ = "B" GOTO 397
  89. 396  GOTO 398
  90. 397  VLIN 32,37 AT 11: GOTO 600
  91. 398  IF  SCRN( 11,29) = 15  AND L$ = "M" GOTO 400
  92. 399  GOTO 401
  93. 400  VLIN 26,31 AT 11: GOTO 600
  94. 401  IF  SCRN( 11,21) = 15  AND L$ = "T" GOTO 403
  95. 402  GOTO 404
  96. 403  VLIN 20,25 AT 11: GOTO 600
  97. 404  GOTO 530
  98. 415  IF  SCRN( 31,29) = 15  AND L$ = "B" GOTO 417
  99. 416  GOTO 418
  100. 417  VLIN 24,29 AT 31: GOTO 600
  101. 418  IF  SCRN( 31,23) = 15  AND L$ = "M" GOTO 420
  102. 419  GOTO 421
  103. 420  VLIN 18,23 AT 31: GOTO 600
  104. 421  IF  SCRN( 31,17) = 15  AND L$ = "T" GOTO 423
  105. 422  GOTO 424
  106. 423  VLIN 12,17 AT 31: GOTO 600
  107. 424  GOTO 530
  108. 435  IF  SCRN( 19,29) = 15  AND L$ = "B" GOTO 437
  109. 436  GOTO 438
  110. 437  VLIN 24,29 AT 19: GOTO 600
  111. 438  IF  SCRN( 19,23) = 15  AND L$ = "M" GOTO 440
  112. 439  GOTO 441
  113. 440  VLIN 18,23 AT 19: GOTO 600
  114. 441  IF  SCRN( 19,17) = 15  AND L$ = "T" GOTO 443
  115. 442  GOTO 444
  116. 443  VLIN 12,17 AT 19: GOTO 600
  117. 444  GOTO 530
  118. 455  IF  SCRN( 7,29) = 15  AND L$ = "B" GOTO 457
  119. 456  GOTO 458
  120. 457  VLIN 24,29 AT 7: GOTO 600
  121. 458  IF  SCRN( 7,23) = 15  AND L$ = "M" GOTO 460
  122. 459  GOTO 461
  123. 460  VLIN 18,23 AT 7: GOTO 600
  124. 461  IF  SCRN( 7,17) = 15  AND L$ = "T" GOTO 463
  125. 462  GOTO 464
  126. 463  VLIN 12,17 AT 7: GOTO 600
  127. 464  GOTO 530
  128. 475  IF  SCRN( 27,21) = 15  AND L$ = "B" GOTO 477
  129. 476  GOTO 478
  130. 477  VLIN 16,21 AT 27: GOTO 600
  131. 478  IF  SCRN( 27,15) = 15  AND L$ = "M" GOTO 480
  132. 479  GOTO 481
  133. 480  VLIN 10,15 AT 27: GOTO 600
  134. 481  IF  SCRN( 27,9) = 15  AND L$ = "T" GOTO 483
  135. 482  GOTO 484
  136. 483  VLIN 4,9 AT 27: GOTO 600
  137. 484  GOTO 530
  138. 495  IF  SCRN( 15,21) = 15  AND L$ = "B" GOTO 497
  139. 496  GOTO 498
  140. 497  VLIN 16,21 AT 15: GOTO 600
  141. 498  IF  SCRN( 15,15) = 15  AND L$ = "M" GOTO 500
  142. 499  GOTO 501
  143. 500  VLIN 10,15 AT 15: GOTO 600
  144. 501  IF  SCRN( 15,9) = 15  AND L$ = "T" GOTO 503
  145. 502  GOTO 504
  146. 503  VLIN 4,9 AT 15: GOTO 600
  147. 504  GOTO 530
  148. 515  IF  SCRN( 3,21) = 15  AND L$ = "B" GOTO 517
  149. 516  GOTO 518
  150. 517  VLIN 16,21 AT 3: GOTO 600
  151. 518  IF  SCRN( 3,15) = 15  AND L$ = "M" GOTO 520
  152. 519  GOTO 521
  153. 520  VLIN 10,15 AT 3: GOTO 600
  154. 521  IF  SCRN( 3,9) = 15  AND L$ = "T" GOTO 523
  155. 522  GOTO 530
  156. 523  VLIN 4,9 AT 3: GOTO 600
  157. 530  HOME : VTAB 22: FLASH : PRINT "POSITION FILLED": NORMAL 
  158. 535  VTAB 23: PRINT "TRY AGAIN."
  159. 537  FOR Z = 1 TO 700: NEXT Z
  160. 540  IF X = 1  THEN X = 12: GOTO 547
  161. 545  IF X = 12  THEN X = 1
  162. 547  HOME 
  163. 550  GOTO 201
  164. 600  REM * CHECKING ROUTINE
  165. 605  REM * POLE CHECK
  166. 610  FOR I = 1 TO 3
  167. 615  READ D,E,F
  168. 620  IF  SCRN( D,7) = X  AND  SCRN( D,13) = X  AND  SCRN( D,19) = X  THEN R = R +1
  169. 625  IF  SCRN( E,15) = X  AND  SCRN( E,21) = X  AND  SCRN( E,27) = X  THEN R = R +1
  170. 630  IF  SCRN( F,23) = X  AND  SCRN( F,28) = X  AND  SCRN( F,35) = X  THEN R = R +1
  171. 635  NEXT I
  172. 640  DATA  3,7,11,15,19,23,27,31,35
  173. 645  REM * HORIZONTAL CHECK
  174. 650  FOR I = 1 TO 3
  175. 655  DATA  7,15,23,13,21,28,19,27,35
  176. 660  READ D,E,F
  177. 665  IF  SCRN( 3,D) = X  AND  SCRN( 15,D) = X  AND  SCRN( 27,D) = X  THEN R = R +1
  178. 670  IF  SCRN( 7,E) = X  AND  SCRN( 19,E) = X  AND  SCRN( 31,E) = X  THEN R = R +1
  179. 675  IF  SCRN( 11,F) = X  AND  SCRN( 23,F) = X  AND  SCRN( 35,F) = X  THEN R = R +1
  180. 680  NEXT I
  181. 685  REM * VERTICAL CHECK
  182. 690  FOR I = 1 TO 3
  183. 695  DATA  3,7,11,15,19,23,27,31,35
  184. 700  READ D,E,F
  185. 705  IF  SCRN( D,7) = X  AND  SCRN( E,15) = X  AND  SCRN( F,23) = X  THEN R = R +1
  186. 710  IF  SCRN( D,13) = X  AND  SCRN( E,21) = X  AND  SCRN( F,28) = X  THEN R = R +1
  187. 715  IF  SCRN( D,19) = X  AND  SCRN( E,27) = X  AND  SCRN( F,35) = X  THEN R = R +1
  188. 720  NEXT I
  189. 725  REM * VERTICAL DIAGONAL CHECK
  190. 730  FOR I = 1 TO 3
  191. 732  READ D,E,F
  192. 735  DATA  3,7,11,15,19,23,27,31,35
  193. 740  IF  SCRN( D,7) = X  AND  SCRN( E,21) = X  AND  SCRN( F,35) = X  THEN R = R +1
  194. 745  IF  SCRN( D,19) = X  AND  SCRN( E,21) = X  AND  SCRN( F,23) = X  THEN R = R +1
  195. 750  NEXT I
  196. 755  REM * HORIZONTAL DIAGONAL CHECK
  197. 760  IF  SCRN( 3,7) = X  AND  SCRN( 15,13) = X  AND  SCRN( 27,19) = X  THEN R = R +1
  198. 765  IF  SCRN( 3,19) = X  AND  SCRN( 15,13) = X  AND  SCRN( 27,7) = X  THEN R = R +1
  199. 770  IF  SCRN( 7,15) = X  AND  SCRN( 19,21) = X  AND  SCRN( 31,27) = X  THEN R = R +1
  200. 775  IF  SCRN( 7,27) = X  AND  SCRN( 19,21) = X  AND  SCRN( 31,15) = X  THEN R = R +1
  201. 780  IF  SCRN( 11,23) = X  AND  SCRN( 23,28) = X  AND  SCRN( 35,35) = X  THEN R = R +1
  202. 785  IF  SCRN( 11,35) = X  AND  SCRN( 23,28) = X  AND  SCRN( 35,23) = X  THEN R = R +1
  203. 790  REM * DIAGONAL DIAGONAL CHECK
  204. 795  IF  SCRN( 3,7) = X  AND  SCRN( 19,21) = X  AND  SCRN( 35,35) = X  THEN R = R +1
  205. 800  IF  SCRN( 3,19) = X  AND  SCRN( 19,21) = X  AND  SCRN( 35,23) = X  THEN R = R +1
  206. 805  IF  SCRN( 11,23) = X  AND  SCRN( 19,21) = X  AND  SCRN( 27,19) = X  THEN R = R +1
  207. 810  IF  SCRN( 11,35) = X  AND  SCRN( 19,21) = X  AND  SCRN( 27,7) = X  THEN R = R +1
  208. 815  REM * DIAGONAL THROUGH CENTER CHECK
  209. 820  FOR I = 1 TO 3
  210. 825  DATA  23,15,7,28,21,13,35,27,19
  211. 830  READ D,E,F
  212. 835  IF  SCRN( 11,D) = X  AND  SCRN( 19,E) = X  AND  SCRN( 27,F) = X  THEN R = R +1
  213. 840  NEXT I
  214. 845  FOR I = 1 TO 3
  215. 850  DATA  7,15,23,13,21,28,19,27,35
  216. 855  READ D,E,F
  217. 860  IF  SCRN( 3,D) = X  AND  SCRN( 19,E) = X  AND  SCRN( 35,F) = X  THEN R = R +1
  218. 865  NEXT I
  219. 900  FOR L = 3 TO 35  STEP 4
  220. 910  FOR M = 9 TO 33  STEP 3
  221. 920  IF  SCRN( L,M) = 15  THEN 1000
  222. 930  NEXT M,L
  223. 950  GOTO 1100
  224. 1000  RESTORE 
  225. 1010  IF X = 1  THEN S = R
  226. 1012  IF X = 12  THEN T = R
  227. 1013  IF  LEN(A$) + LEN(B$) >10  THEN 1020
  228. 1015  VTAB 23: HTAB 18: INVERSE : PRINT " ";A$;" ";S;"  /  ";B$;" ";T;" ": NORMAL 
  229. 1017  GOTO 200
  230. 1020  VTAB 23: HTAB 14: INVERSE : PRINT " ";A$;" ";S;" / ";B$;" ";T;" ": NORMAL 
  231. 1025  GOTO 200
  232. 1100  HOME : VTAB 21: HTAB 14: FLASH : PRINT " END OF GAME ": NORMAL 
  233. 1101  IF X = 1  THEN S = R
  234. 1102  IF X = 12  THEN T = R
  235. 1104  COLOR= 15
  236. 1105  HLIN 0,39 AT 0: HLIN 0,39 AT 39: VLIN 0,39 AT 0: VLIN 0,39 AT 39
  237. 1106  FOR Z = 1 TO 50
  238. 1107 Y =  PEEK( -16336): FOR H = 1 TO 10: NEXT H: NEXT Z
  239. 1108  VTAB 22: PRINT "FINAL SCORE:   ";A$;" ";S;"  /  ";B$;" ";T
  240. 1109  IF S >T  THEN A = A +1
  241. 1111  IF T >S  THEN B = B +1
  242. 1112  VTAB 23: HTAB 5: PRINT " GAMES WON: ";A$;" ";A;" --- ";B$;" ";B
  243. 1114  VTAB 24: HTAB 5: PRINT "TAP ANY KEY TO PLAY ANOTHER SET";: GET Z$
  244. 1115  GOTO 100
  245. 1117  END